home *** CD-ROM | disk | FTP | other *** search
/ Mac-Source 1994 July / Mac-Source_July_1994.iso / C and C++ / Libraries / TransSkel / Demos / Pascal Demos / Button / Dialog2.p < prev    next >
Text File  |  1994-02-23  |  2KB  |  107 lines

  1. unit Dialog2;
  2.  
  3. interface
  4.  
  5.     uses
  6.         TransSkel, ButtonGlobals;
  7.  
  8.  
  9.     procedure DoDialog2;
  10.  
  11. implementation
  12.  
  13.     const
  14.  
  15.         findItem = 1;
  16.         cancelItem = 2;
  17.         staticTextItem = 3;
  18.         editTextItem = 4;
  19.         outlineItem = 5;
  20.  
  21.  
  22.     var
  23.  
  24.         defaultButton: Integer;
  25.  
  26. {--------------------------------------------------------------------}
  27. { Dialog 2 procedures }
  28. {--------------------------------------------------------------------}
  29.  
  30.     procedure OutlineButton (dlog: DialogPtr;
  31.                                     item: Integer);
  32.     begin
  33.         SkelDrawButtonOutline(SkelGetDlogCtl(dlog, defaultButton));
  34.     end;
  35.  
  36.  
  37.     procedure SetDefaultButton (dlog: DialogPtr;
  38.                                     item: Integer);
  39.         var
  40.             r: Rect;
  41.     begin
  42.         defaultButton := item;
  43.         SkelGetDlogRect(dlog, defaultButton, r);    { get button rect }
  44.         InsetRect(r, -4, -4);                        { expand it }
  45.         SkelSetDlogRect(dlog, outlineItem, r);        { use for outline item }
  46.         SkelSetDlogProc(dlog, outlineItem, @OutlineButton);
  47.         SkelDrawButtonOutline(SkelGetDlogCtl(dlog, defaultButton));
  48.     end;
  49.  
  50.  
  51.     procedure DoDialog2;
  52.         var
  53.             filter: ModalFilterProcPtr;
  54.             dlog: DialogPtr;
  55.             savePort: GrafPtr;
  56.             item: Integer;
  57.             newDefault: Integer;
  58.             str: Str255;
  59.             loop: Boolean;
  60.     begin
  61.         dlog := GetNewDialog(dlog2Res, nil, WindowPtr(-1));
  62.         if (dlog = DialogPtr(nil)) then
  63.             begin
  64.                 SysBeep(1);
  65.                 exit(DoDialog2);
  66.             end;
  67.  
  68.         SkelPositionWindow(dlog, skelPositionOnMainDevice, horizRatio, vertRatio);
  69.  
  70.         GetPort(savePort);
  71.         SetPort(dlog);
  72.  
  73.         SetDefaultButton(dlog, cancelItem);
  74.  
  75.         ShowWindow(dlog);
  76.  
  77.         loop := true;
  78.         while (loop) do
  79.             begin
  80.                 filter := SkelDlogFilter(nil, true);
  81.                 SkelDlogDefaultItem(defaultButton);
  82.                 SkelDlogCancelItem(cancelItem);
  83.                 ModalDialog(filter, item);
  84.                 SkelRmveDlogFilter;
  85.                 if ((item = findItem) or (item = cancelItem)) then
  86.                     loop := false
  87.                 else
  88.                     begin
  89.                         SkelGetDlogStr(dlog, editTextItem, str);
  90.                         if (length(str) > 0) then
  91.                             newDefault := findItem
  92.                         else
  93.                             newDefault := cancelItem;
  94.                         if (newDefault <> defaultButton) then
  95.                             begin
  96.                                 SkelEraseButtonOutline(SkelGetDlogCtl(dlog, defaultButton));
  97.                                 SetDefaultButton(dlog, newDefault);
  98.                             end;
  99.                     end;
  100.             end;
  101.  
  102.         DisposeDialog(dlog);
  103.         SetPort(savePort);
  104.  
  105.     end;
  106.  
  107. end.